Skip to main content

05 map、reduce和monad的值操作

数据的核心操作

map 映射和函子

函子:一个带运算工具的数据类型或数据结构值。

stringMap(uppercaseLetter, "Hello World!"); // HELLO WORLD!

arrayMap(["1", "2", "3"], unary(parseInt)); // [1,2,3]

filter 过滤和筛选

[1, 2, 3, 4, 5].filter(isOdd); // [1,3,5]

reduce 和缩减器

[5, 10, 15].reduce((arr, val) => arr * val, 3); // 2250

reduce 能独立实现,也可以用 map 和 filter 的方法实现。因为 reduce 的初始值可以是一个空数组[],可以把循环的结果当成另一个数组。

**利用副作用来提高性能!**原则上这些变化都是在函数内部,需要注意的副作用一般多来自外部。

单子 monad

array 作为 functor

chain 作为 bind、flatMap

monoid

满足类型签名的函数就组成了 monoid。

applicative